perm filename STTINT.SAI[K17,SYS] blob sn#087588 filedate 1974-02-16 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00003 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN "STATISTICS INTERPRETER"
C00004 00003	FOR I←0 STEP 1 UNTIL '77 DO JOBS[QUEUE,I]←-1
C00009 ENDMK
C⊗;
BEGIN "STATISTICS INTERPRETER"
EXTERNAL INTEGER _SKIP_;
INTEGER I,J,K,L,OP,EOF,VAL,OTHERHALF,OURJOB,LINES;
LABEL SKIP_OURJOB;
STRING S1,S2,S3,FILE;
DEFINE CRLF="'15&'12",TAB="'11",MAXLINES="52";
DEFINE NAME="1",SIZE="2",POSITION="3",QUEUE="4",JBTSIN="5",SEGMENT="6",
	GLUE="7",LOCK="8",SPW10="9",SPW6="10",MAXVAL="SPW6";
DEFINE _NQUEUES="'234",_QNAMS="'235";
INTEGER ARRAY JOBS[1:MAXVAL,0:'77];
STRING ARRAY QNAMS[-1:'77];
PRELOAD_WITH "INT",
	"PHANTOM",
	"COMMAND",
	"JOBRD",
	"SPW",
	['37-4]"UNDEF";
STRING ARRAY SINNAMES[0:'37];
DEFINE TITLE=
"""JOB #	OP	VALUE	SIZE(K)	POS	QUEUE	SEG #	JOBNAME	JBTSIN	JBTGLU	SPW10	SPW6""";
BOOLEAN HALF,DIRDEV,SPECIAL;
INTEGER PROCEDURE WORD;
IF HALF THEN BEGIN
	HALF←FALSE;
	RETURN(OTHERHALF);
	END
    ELSE BEGIN
	INTEGER TEMP;
	HALF←TRUE;
	TEMP←WORDIN(0);
	OTHERHALF←TEMP LAND '777777;
	RETURN(TEMP LSH -18);
	END;
PROCEDURE COUNT_LINE;
IF (LINES←LINES-1)<0 THEN BEGIN
	OUT(1,'14&TITLE&CRLF&CRLF);
	LINES←MAXLINES-3;
	END;
FOR I←0 STEP 1 UNTIL '77 DO JOBS[QUEUE,I]←-1;
I←CALL(_NQUEUES,"PEEK");
J←CALL(_QNAMS,"PEEK");
FOR K←0 STEP 1 UNTIL I DO QNAMS[K]←CVSTR(CALL(J+K,"PEEK"));
FOR I←I STEP 1 UNTIL '77 DO QNAMS[I]←"UNDEF";
OPEN(0,"DSK",'10,2,0,0,0,EOF);
LOOKUP(0,"STATS.DAT",EOF);
IF EOF THEN USERERR(0,0,"Can't find STATS.DAT");
HALF←FALSE;
S1←(IF CALL(CVSIX("LST"),"DEVCHR") THEN "LST" ELSE "DSK");
OPEN(1,S1,0,0,2,0,0,0);
DIRDEV←CALL(CVSIX(S1),"DEVCHR") LAND '4000000;
IF DIRDEV THEN BEGIN
	OUTSTR("Output file : ");
	IF EQU(NULL,FILE←INCHWL) THEN FILE←"STATS.LST";
	IF _SKIP_='175 THEN BEGIN
		OUTSTR(CRLF);
		SPECIAL←TRUE
		END ELSE SPECIAL←FALSE;
	ENTER(1,FILE,EOF);
	IF EOF THEN USERERR(0,0,"Can't enter "&FILE);
	PTOSTR(0,"SPOOL "&FILE);
	END;
OUT(1,TITLE&CRLF&CRLF);
LINES←MAXLINES-2;
OURJOB←WORD;
WHILE TRUE DO BEGIN
SKIP_OURJOB:	VAL←WORD;
	IF EOF THEN DONE;
	IF VAL=0 THEN GO TO SKIP_OURJOB;
	J←VAL LAND '77;
	IF VAL LAND '400000 THEN BEGIN
		OP←(VAL LSH -12)LAND '37;
		VAL←(VAL LSH -6)LAND '77;
		END
	    ELSE BEGIN
		OP←-1-(VAL LSH -14);
		VAL←(VAL LSH -6)LAND '377;
		END;
	S1←TAB&CVS(JOBS[SIZE,J])&TAB&
		(IF JOBS[SIZE,J] ∧ (I←JOBS[POSITION,J])=0 THEN "SWAPPED" ELSE CVOS(I))&
		TAB&QNAMS[JOBS[QUEUE,J]]&
		TAB&CVS(JOBS[SEGMENT,J])&TAB&CVXSTR(JOBS[NAME,J])&
		TAB&CVOS(JOBS[JBTSIN,J])&TAB&CVS(JOBS[GLUE,J])&
		TAB&CVOS(JOBS[SPW10,J])&TAB&CVOS(JOBS[SPW6,J])&CRLF;
	IF ¬(-3<OP<8) THEN BEGIN
		COUNT_LINE;
		OUT(1,"ILLEGAL OP-CODE, VALUE = "&CVS(OP)&CRLF);
		GO TO SKIP_OURJOB;
		END;
	CASE OP+2 OF BEGIN
		IF JOBS[POSITION,J]=0 ∧ JOBS[SIZE,J] THEN
			S3←"   *	SWAPIN	"&CVOS(JOBS[POSITION,J]←VAL LSH 10)
		    ELSE IF (I←JOBS[POSITION,J]←VAL LSH 10)=0 ∧ (K←JOBS[SIZE,J]) THEN
			S3←"   *	SWAP	OUT"
			    ELSE S3←"   *	SHUFFLE	"&CVOS(I);
		IF VAL=JOBS[SIZE,J] THEN GO TO SKIP_OURJOB
			ELSE S3←"	SIZE	"&CVS(JOBS[SIZE,J]←VAL);
		BEGIN
			VAL←(WORD LSH 18)+WORD;
			S3←"	NAME	"&CVXSTR(JOBS[NAME,J]←VAL);
		  END;
		S3←"	QUEUE	"&QNAMS[JOBS[QUEUE,J]←VAL];
		BEGIN
		  IF VAL LAND '40 THEN BEGIN
			S3←"     +";
			JOBS[JBTSIN,J]←JOBS[JBTSIN,J]LOR('400000 LSH -(VAL←VAL-'40));
			END
		    ELSE BEGIN
			S3←"     -";
			JOBS[JBTSIN,J]←JOBS[JBTSIN,J]LAND LNOT('400000 LSH -VAL);
			END;
		  S3←S3&"JBTSIN	"&SINNAMES[VAL];
		  END;
		IF VAL THEN S3←"	SEG #	"&CVS(JOBS[SEGMENT,J]←VAL)
			ELSE S3←"	FLUSHES	SEGMENT";
		IF VAL='77 THEN BEGIN
			S3←"	SPW	OFF";
			JOBS[SPW6,J]←JOBS[SPW10,J]←0;
			END
		  ELSE IF VAL LAND '40 THEN BEGIN
			VAL←VAL-'40;
			S3←"	SPW6	"&CVOS(VAL);
			JOBS[SPW6,J]←VAL;
			END
		    ELSE BEGIN
			S3←"	SPW10	"&CVOS(VAL);
			JOBS[SPW10,J]←VAL;
			END;
		IF JOBS[GLUE,J]←VAL THEN S3←"	GLUE	"&CVS(VAL)
			ELSE S3←"	UNGLUE	";
		S3←(IF JOBS[LOCK,J]←VAL THEN "	LOCK	" ELSE "	UNLOCK	");
		S3←"	FIT	IN";
		END;
	IF J=OURJOB THEN GO TO SKIP_OURJOB;
	IF (¬SPECIAL ∨ (OP=-2 ∨ OP=7)) ∧ JOBS[QUEUE,J]≥0 THEN BEGIN
		COUNT_LINE;
		OUT(1,(IF J<10 THEN " " ELSE NULL)&CVS(J)&S3&S1);
		END;
	END;
RELEASE(0);
RELEASE(1);
CALL(0,"EXIT");
END;